﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BUS;
using DTO;

namespace QuanLyNhaSach.Employee
{
    public partial class FrmUserGroupList : DevComponents.DotNetBar.Office2007Form
    {
       
        BindingList<UsersGroupDTO> listUserBinding;
        int rowIndex; //Biến lưu giá trị của dòng đang sửa hơặc vừa thêm mới
        UsersGroupBUS usersGroupBUS;
        RuleObjectBUS RuleBUS;
        public FrmUserGroupList()
        {
            InitializeComponent();
            dtgUsersGroupList.AutoGenerateColumns = false;
            usersGroupBUS = new UsersGroupBUS();
            listUserBinding = new BindingList<UsersGroupDTO>();
            rowIndex = 0;
            RuleBUS = new RuleObjectBUS();
        }

        private void FrmUserGroupList_Load(object sender, EventArgs e)
        {
            listUserBinding = usersGroupBUS.GetNewBindingListUsersGroup();
            dtgUsersGroupList.DataSource = listUserBinding;
            this.VisibleChanged += new EventHandler(UsersGroupList_VisibleChanged);
            CheckPermission();
        }

        private void CheckPermission()
        {
            btnDel.Enabled = RuleBUS.CheckPermission(Global.GroupID, (int)RuleObject.ActionAuthor);
            btnUpdate.Enabled = btnDel.Enabled;
        }

        void UsersGroupList_VisibleChanged(object sender, EventArgs e)
        {
            if (this.Visible)
            {
                Global.GenerateNumber(dtgUsersGroupList, colNumber.Index);
                Global.GenerateEditColumn(dtgUsersGroupList, colEdit.Index);
                Global.GenerateDeleteColumn(dtgUsersGroupList, colDel.Index);
            }
        }


        #region Public Methods

        public void UsersGroupChanged(UsersGroupDTO userDTO)
        {
            UsersGroupDTO usersGroupDTO = usersGroupBUS.GetUsersGroupByID(userDTO.UsersGroupID);

            dtgUsersGroupList[colUsersGroupName.Index, rowIndex].Value = usersGroupDTO.UsersGroupName;
            dtgUsersGroupList[colUsersGroupCode.Index, rowIndex].Value = usersGroupDTO.UsersGroupCode;
          
        }

        public void UsersGroupChangeAfterInsert(UsersGroupDTO userDTO)
        {
            UsersGroupDTO usersGroupDTO = usersGroupBUS.GetUsersGroupByID(userDTO.UsersGroupID);

            listUserBinding.Add(usersGroupDTO);

            rowIndex = dtgUsersGroupList.Rows.GetLastRow(DataGridViewElementStates.None);
            dtgUsersGroupList[colEdit.Index, rowIndex].Value = Properties.Resources.edit_16;
            dtgUsersGroupList[colDel.Index, rowIndex].Value = Properties.Resources.deletered;
            //Global.GenerateNumber(dtgCategoryList, colNumber.Index);
            if (rowIndex == 0)
            {
                dtgUsersGroupList[colNumber.Index, rowIndex].Value = rowIndex + 1;
            }
            else
            {
                dtgUsersGroupList[colNumber.Index, rowIndex].Value = dtgUsersGroupList[colNumber.Index, rowIndex - 1].Value.ToString();
            }
        }

        #endregion Public Methods

        #region Button,Delete, Update

        private void btnDel_Click(object sender, EventArgs e)
        {
            DeleteUsersGroup();
        }

        private void btnUpdate_Click(object sender, EventArgs e)
        {
            UpdateUsersGroup(dtgUsersGroupList.CurrentRow.Index);
        }

        private void dtgUsersGroupList_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                if (e.ColumnIndex == colEdit.Index)
                {
                    UpdateUsersGroup(e.RowIndex);
                }
                else if (e.ColumnIndex == colDel.Index)
                {
                    DeleteUsersGroup();
                }
            }
        }

        private void DeleteUsersGroup()
        {
            if (dtgUsersGroupList.Rows.Count > 0)
            {
                if (!RuleBUS.CheckPermission(Global.GroupID, (int)RuleObject.ActionUserGroup))
                {
                    Global.SetMessage(lblMessage, "Bạn không có quyền thực hiện thao tác này!", false);
                    return;
                }

                if (Global.ShowMessageBoxDelete("Bạn chắc chắn muốn xóa thể loại này ?") == DialogResult.Yes)
                {
                    int userID = int.Parse(dtgUsersGroupList[colUsersGroupID.Index, dtgUsersGroupList.CurrentRow.Index].Value.ToString());
                    if (usersGroupBUS.DeleteUsersGroup(userID))
                    {
                        Global.SetMessage(lblMessage, "Xóa thành công", true);
                        listUserBinding.Remove(listUserBinding.First(c => c.UsersGroupID == userID));
                    }
                    else
                    {
                        Global.SetMessage(lblMessage, "Xóa không thành công", false);
                    }
                }
            }
        }

        private void UpdateUsersGroup(int index)
        {
            if (!RuleBUS.CheckPermission(Global.GroupID, (int)RuleObject.ActionUserGroup))
            {
                Global.SetMessage(lblMessage, "Bạn không có quyền thực hiện thao tác này!", false);
                return;
            }

            rowIndex = index;
            UsersGroupDTO usersGroupDTO = new UsersGroupDTO
            {
                UsersGroupID = int.Parse(dtgUsersGroupList[colUsersGroupID.Index, rowIndex].Value.ToString()),
                UsersGroupCode = dtgUsersGroupList[colUsersGroupCode.Index, rowIndex].Value.ToString(),
                UsersGroupName = dtgUsersGroupList[colUsersGroupName.Index, rowIndex].Value.ToString()
            };


            Employee.FrmUsersGroupDetail frm = new FrmUsersGroupDetail { UsersGroup = usersGroupDTO, Action = ActionName.Update };
            //frm.OnCategoryChanged += new Book.FrmCategoryDetail.CategoryHasChanged(CategoryChanged);
            frm.ShowDialog();
        }

        #endregion Button, Delete, Update

    }
}
